package org.wiztools.commons.feed;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.AbstractHttpMessage;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;

/**
 *
 * @author subhash
 */
final class HttpUtil {
    static InputStream getConnectionStream(URL url, Options options) throws IOException{
        if(options != null){
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            AbstractHttpMessage method = new HttpGet(url.toString());
            if(options.isHttpAuthEnabled()){
                String username = options.getHttpAuthUsername();
                String password = options.getHttpAuthPassword();
                httpclient.getCredentialsProvider().setCredentials(
                        AuthScope.ANY, new UsernamePasswordCredentials(username, password));
            }
            if(options.isCookiesSet()){
                Map<String, String> cookies = options.getHttpCookies();
                StringBuilder sb = new StringBuilder();
                for(String name: cookies.keySet()){
                    sb.append(name)
                            .append("=")
                            .append(cookies.get(name))
                            .append(";");
                }
                method.addHeader("Cookie", sb.toString());
            }

            HttpResponse http_res = httpclient.execute((HttpUriRequest) method,
                    localContext);
            return new WrappedHttpClientInputStream(http_res, httpclient);
        }
        else{
            return url.openStream();
        }
    }
}
